package pwd.allen;

import net.bytebuddy.agent.builder.AgentBuilder;
import pwd.allen.bytebuddy.AgentTransformer;
import pwd.allen.bytebuddy.BytebuddyListener;

import java.lang.instrument.Instrumentation;

import static net.bytebuddy.matcher.ElementMatchers.*;

/**
 * 使用byte-buddy实现打印指定方法的执行时间
 *
 * @author 门那粒沙
 * @create 2021-03-09 21:59
 **/
public class PreMainAgentByteBuddy {

    public static void premain(String agentArgs, Instrumentation inst) {

        // type指定了agent拦截的包名以pwd.allen作为前缀
        new AgentBuilder.Default()
                .ignore(nameEndsWith("Test"))// 配置忽略拦截的包
                .type(nameStartsWith("pwd.allen").or(named("java.util.Date")))// 配置需要拦截的包
                .transform(new AgentTransformer())  // 配置transformer，指定拦截哪些方法已经做何拦截处理
                .with(new BytebuddyListener()) // 配置监听器
                .installOn(inst);   // 将配置安装到Instrumentation

    }
}
